package com.atlin.project.service;

import com.atlin.project.model.domain.chart.Chart;

import com.atlin.project.model.domain.chart.ChartOriginalData;
import com.atlin.project.model.dto.chart.ChartQueryRequest;
import com.atlin.project.model.dto.chart.ChartUpdateRequest;
import com.atlin.project.model.enums.chart.ChartStatusEnum;
import com.atlin.project.model.vo.chart.ChartVO;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

import javax.servlet.http.HttpServletRequest;

/**
 * @author atlin
 * @description 针对表【chart(图表信息表)】的数据库操作Service
 * @createDate 2024-11-12 13:17:21
 */
public interface ChartService extends IService<Chart> {
    void valid(Chart chart, boolean add);

    /**
     * 获取封装
     *
     * @param chart
     * @param request
     * @return
     */
    ChartVO getChartVO(Chart chart, HttpServletRequest request);


    /**
     * 获取查询条件
     *
     * @param questionQueryRequest
     * @return
     */
    QueryWrapper<Chart> getQueryWrapper(ChartQueryRequest questionQueryRequest);

    /**
     * 分页获取封装
     *
     * @param questionPage
     * @param request
     * @return
     */
    Page<ChartVO> getChartVOPage(Page<Chart> questionPage, HttpServletRequest request);

    /**
     * chart option校验
     *
     * @param option
     * @return
     */
    boolean chartOptionValidator(String option);

    /**
     * 存储 chart 原始数据
     *
     * @param chartId
     * @param chartData
     * @return 数据表名
     */
    String saveChartData(long chartId, String chartData);

    /**
     * 处理图表生成错误
     *
     * @param chartId
     * @param execMessage
     */
    void handleChartUpdateError(long chartId, String execMessage);

    /**
     * 处理图表生成错误
     *
     * @param chartId
     * @param execMessage
     */
    void handleChartUpdateError(long chartId, String execMessage, ChartStatusEnum chartStatusEnum);

    /**
     * 获取 chart 原始数据 所有列
     *
     * @param chartId 图表id
     * @return scv
     */
    String getChartOriginalCsvData(long chartId);

    /**
     * 获取 chart 原始数据 所有列
     *
     * @param chartId 图表id
     * @return scv
     */
    ChartOriginalData getChartOriginalObjData(long chartId);

    /**
     * 更新图表数据 option 或 原始数据列表
     */
    boolean updateChart(ChartUpdateRequest chartUpdateRequest);

    /**
     * 自动重试当日生成失败的图表
     */
    void autoRetry();
}
